/* 

代码定义了一个对象P，其中包含了三个方法：queue（初始化为一个已解决的Promise对象、run和sleep。run方法用于执行给定的函数，并返回该对象以支持链式调用；sleep方法用于暂停执行一段时间，并返回该对象以支持链式调用。在示例中，通过连续调用run、sleep和run方法，依次输出111、222和333，并在每次输出之间暂停了一定的时间。
*/
var P = {
    queue: Promise.resolve(),
    run(fn = () => { }) {
      this.queue = this.queue.then(() => {
        fn()
      })
      return this
    },
    sleep(time = 0) {
      this.queue = this.queue.then(() => {
        return new Promise((res) => {
          setTimeout(() => {
            res()
          }, time);
        })
      })
      return this
    }
  }
  P.run(() => {
    console.log(111)
  }).sleep(2000).run(() => {
    console.log(222)
  }).sleep(1000).run(() => {
    console.log(333)
  })

